EC-CUBE 2.11.4
[ class tree: EC-CUBE 2.11.4 ] [ index: EC-CUBE 2.11.4 ] [ all elements ]

Source for file SC_SendMail.php

Documentation is available at SC_SendMail.php

  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) 2000-2011 LOCKON CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.lockon.co.jp/
  8.  *
  9.  * This program is free software; you can redistribute it and/or
  10.  * modify it under the terms of the GNU General Public License
  11.  * as published by the Free Software Foundation; either version 2
  12.  * of the License, or (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  22.  */
  23.  
  24. require_once 'Mail.php';
  25.  
  26. //--- テキスト/HTML メール送信
  27. class SC_SendMail {
  28.  
  29.     var $to;            //  送信先
  30.     var $subject;       //  題名
  31.     var $body;          //  本文
  32.     var $cc;            // CC
  33.     var $bcc;           // BCC
  34.     var $replay_to;     // replay_to
  35.     var $return_path;   // return_path
  36.     var $objMail;
  37.  
  38.     // コンストラクタ
  39.     function SC_SendMail() {
  40.         $this->arrRecip = array();
  41.         $this->to = "";
  42.         $this->subject = "";
  43.         $this->body = "";
  44.         $this->cc = "";
  45.         $this->bcc = "";
  46.         $this->replay_to = "";
  47.         $this->return_path = "";
  48.         $this->backend = MAIL_BACKEND;
  49.         $this->host = SMTP_HOST;
  50.         $this->port = SMTP_PORT;
  51.         mb_language( 'Japanese' );
  52.  
  53.         //-- PEAR::Mailを使ってメール送信オブジェクト作成
  54.         $this->objMail =& Mail::factory($this->backend,
  55.                                         $this->getBackendParams($this->backend));
  56.     }
  57.  
  58.     // 送信先の設定
  59.     function setRecip($key, $recipient) {
  60.         $this->arrRecip[$key] = $recipient;
  61.     }
  62.  
  63.     // 宛先の設定
  64.     function setTo($to, $to_name = "") {
  65.         if($to != "") {
  66.             $this->to = $this->getNameAddress($to_name, $to);
  67.             $this->setRecip('To', $to);
  68.         }
  69.     }
  70.  
  71.     // 送信元の設定
  72.     function setFrom($from, $from_name = "") {
  73.         $this->from = $this->getNameAddress($from_name, $from);
  74.     }
  75.  
  76.     // CCの設定
  77.     function setCc($cc, $cc_name = "") {
  78.         if($cc != "") {
  79.             $this->cc = $this->getNameAddress($cc_name, $cc);
  80.             $this->setRecip('Cc', $cc);
  81.         }
  82.     }
  83.  
  84.     // BCCの設定
  85.     function setBCc($bcc) {
  86.         if($bcc != "") {
  87.             $this->bcc = $bcc;
  88.             $this->setRecip('Bcc', $bcc);
  89.         }
  90.     }
  91.  
  92.     // Reply-Toの設定
  93.     function setReplyTo($reply_to) {
  94.         if($reply_to != "") {
  95.             $this->reply_to = $reply_to;
  96.         }
  97.     }
  98.  
  99.     // Return-Pathの設定
  100.     function setReturnPath($return_path) {
  101.         $this->return_path = $return_path;
  102.     }
  103.  
  104.     // 件名の設定
  105.     function setSubject($subject) {
  106.         $this->subject = mb_encode_mimeheader($subject, 'JIS', 'B', "\n");
  107.         $this->subject = str_replace("\x0D\x0A", "\n", $this->subject);
  108.         $this->subject = str_replace("\x0D", "\n", $this->subject);
  109.         $this->subject = str_replace("\x0A", "\n", $this->subject);
  110.     }
  111.  
  112.     // 本文の設定
  113.     function setBody($body) {
  114.         $this->body = mb_convert_encoding($body, 'JIS', CHAR_CODE);
  115.     }
  116.  
  117.     // SMTPサーバーの設定
  118.     function setHost($host) {
  119.         $this->host = $host;
  120.         $arrHost = array(
  121.                 'host' => $this->host,
  122.                 'port' => $this->port
  123.         );
  124.         //-- PEAR::Mailを使ってメール送信オブジェクト作成
  125.         $this->objMail =& Mail::factory('smtp', $arrHost);
  126.  
  127.     }
  128.  
  129.     // SMTPポートの設定
  130.     function setPort($port) {
  131.         $this->port = $port;
  132.         $arrHost = array(
  133.                 'host' => $this->host,
  134.                 'port' => $this->port
  135.         );
  136.         //-- PEAR::Mailを使ってメール送信オブジェクト作成
  137.         $this->objMail =& Mail::factory('smtp', $arrHost);
  138.     }
  139.  
  140.     // 名前<メールアドレス>の形式を生成
  141.     function getNameAddress($name, $mail_address) {
  142.             if($name != "") {
  143.                 // 制御文字を変換する。
  144.                 $_name = $name;
  145.                 $_name = ereg_replace("<","<", $_name);
  146.                 $_name = ereg_replace(">",">", $_name);
  147.                 $_name = mb_encode_mimeheader($_name, 'JIS', 'B', "\n");
  148.                 $name_address = "\"". $_name . "\"<" . $mail_address . ">";
  149.             } else {
  150.                 $name_address = $mail_address;
  151.             }
  152.             return $name_address;
  153.     }
  154.  
  155.     function setItem($to, $subject, $body, $fromaddress, $from_name, $reply_to="", $return_path="", $errors_to="", $bcc="", $cc ="") {
  156.         $this->setBase($to, $subject, $body, $fromaddress, $from_name, $reply_to, $return_path, $errors_to, $bcc, $cc);
  157.     }
  158.  
  159.     function setItemHtml($to, $subject, $body, $fromaddress, $from_name, $reply_to="", $return_path="", $errors_to="", $bcc="", $cc ="") {
  160.         $this->setBase($to, $subject, $body, $fromaddress, $from_name, $reply_to, $return_path, $errors_to, $bcc, $cc);
  161.     }
  162.  
  163.     /*  ヘッダ等を格納
  164.          $to            -> 送信先メールアドレス
  165.          $subject       -> メールのタイトル
  166.          $body          -> メール本文
  167.          $fromaddress   -> 送信元のメールアドレス
  168.          $header        -> ヘッダー
  169.          $from_name     -> 送信元の名前(全角OK)
  170.          $reply_to      -> reply_to設定
  171.          $return_path   -> return-pathアドレス設定(エラーメール返送用)
  172.          $cc            -> カーボンコピー
  173.          $bcc           -> ブラインドカーボンコピー
  174.     */
  175.     function setBase($to, $subject, $body, $fromaddress, $from_name, $reply_to="", $return_path="", $errors_to="", $bcc="", $cc ="") {
  176.         // 宛先設定
  177.         $this->setTo($to);
  178.         // 件名設定
  179.         $this->setSubject($subject);
  180.         // 本文設定(iso-2022-jpだと特殊文字が?で送信されるのでJISを使用する)
  181.         $this->setBody($body);
  182.         // 送信元設定
  183.         $this->setFrom($fromaddress, $from_name);
  184.         // 返信先設定
  185.         $this->setReplyTo($reply_to);
  186.         // CC設定
  187.         $this->setCc($cc);
  188.         // BCC設定
  189.         $this->setBcc($bcc);
  190.  
  191.         // Errors-Toは、ほとんどのSMTPで無視され、Return-Pathが優先されるためReturn_Pathに設定する。
  192.         if($errors_to != "") {
  193.             $this->return_path = $errors_to;
  194.         } else if($return_path != "") {
  195.             $this->return_path = $return_path;
  196.         } else {
  197.             $this->return_path = $fromaddress;
  198.         }
  199.     }
  200.  
  201.     // ヘッダーを返す
  202.     function getBaseHeader() {
  203.         //-- 送信するメールの内容と送信先
  204.         $arrHeader['MIME-Version'] = '1.0';
  205.         $arrHeader['To'] = $this->to;
  206.         $arrHeader['Subject'] = $this->subject;
  207.         $arrHeader['From'] = $this->from;
  208.         $arrHeader['Return-Path'] = $this->return_path;
  209.         if($this->reply_to != "") {
  210.             $arrHeader['Reply-To'] = $this->reply_to;
  211.         }
  212.         if($this->cc != "") {
  213.             $arrHeader['Cc'] = $this->cc;
  214.         }
  215.         if($this->bcc != "") {
  216.             $arrHeader['Bcc'] = $this->bcc;
  217.         }
  218.         $arrHeader['Date'] = date("D, j M Y H:i:s O");
  219.         return $arrHeader;
  220.     }
  221.  
  222.     // ヘッダーを返す
  223.     function getTEXTHeader() {
  224.         $arrHeader = $this->getBaseHeader();
  225.         $arrHeader['Content-Type'] = "text/plain; charset=\"ISO-2022-JP\"";
  226.         $arrHeader['Content-Transfer-Encoding'] = "7bit";
  227.         return $arrHeader;
  228.     }
  229.  
  230.     // ヘッダーを返す
  231.     function getHTMLHeader() {
  232.         $arrHeader = $this->getBaseHeader();
  233.         $arrHeader['Content-Type'] = "text/html; charset=\"ISO-2022-JP\"";
  234.         $arrHeader['Content-Transfer-Encoding'] = "ISO-2022-JP";
  235.         return $arrHeader;
  236.     }
  237.  
  238.     /**
  239.      * メーラーバックエンドに応じた送信先を返す
  240.      *
  241.      * @return array|stringメーラーバックエンドに応じた送信先
  242.      */
  243.     function getRecip() {
  244.         switch ($this->backend) {
  245.             // PEAR::Mail_mail#send は、(他のメーラーバックエンドと異なり) 第1引数を To: として扱う。Cc: や Bcc: は、ヘッダー情報から処理する。
  246.         case 'mail':
  247.             return $this->to;
  248.             break;
  249.         case 'sendmail':
  250.         case 'smtp':
  251.         default:
  252.             return $this->arrRecip;
  253.             break;
  254.         }
  255.     }
  256.  
  257.     /**
  258.      * TXTメール送信を実行する.
  259.      *
  260.      * 設定された情報を利用して, メールを送信する.
  261.      *
  262.      * @return void 
  263.      */
  264.     function sendMail($isHtml = false) {
  265.         $header = $isHtml ? $this->getHTMLHeader() : $this->getTEXTHeader();
  266.         $recip = $this->getRecip();
  267.         // メール送信
  268.         $result = $this->objMail->send($recip, $header, $this->body);
  269.             if (PEAR::isError($result)) {
  270.                 GC_Utils_Ex::gfPrintLog($result->getMessage());
  271.                 GC_Utils_Ex::gfDebugLog($header);
  272.                 return false;
  273.             }
  274.         return true;
  275.     }
  276.  
  277.     /**
  278.      * HTMLメール送信を実行する.
  279.      *
  280.      * @return void 
  281.      */
  282.     function sendHtmlMail() {
  283.         return $this->sendMail(true);
  284.     }
  285.  
  286.     /**
  287.      * メーラーバックエンドに応じたパラメーターを返す.
  288.      *
  289.      * @param string $backend Pear::Mail のバックエンド
  290.      * @return array メーラーバックエンドに応じたパラメーターの配列
  291.      */
  292.     function getBackendParams($backend) {
  293.         switch ($backend) {
  294.         case 'mail':
  295.             $arrParams = array();
  296.             break;
  297.         case 'sendmail':
  298.             $arrParams = array('sendmail_path' => '/usr/bin/sendmail',
  299.                                'sendmail_args' => '-i'
  300.                                );
  301.             break;
  302.         case 'smtp':
  303.         default:
  304.             $arrParams = array(
  305.                                'host' => $this->host,
  306.                                'port' => $this->port
  307.                                );
  308.             break;
  309.         }
  310.         return $arrParams;
  311.     }
  312. }
  313. ?>

Documentation generated on Fri, 24 Feb 2012 14:02:56 +0900 by Seasoft